iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0

在討論MLOps的過程當中,許多客戶會針對他們有興趣的事情提出不同的問題,像是:模型監測、安全性、常見案例、資料的隱私處理等等。其中一次在談論AWS的ML Lens白皮書的時候,在看這張:End-to-End Machine Learning Process.

*來源:Phases of ML Workloads

大家便開始討論目前想做的應用情境、公司的資料儲存狀況等等。其中一個討論來自則是關於特徵工程:"我記得以前也做過機器學習的專案,像是商業案例要對應到機器學習問題、挑演算法這些,我都能理解,可是特徵工程是在做什麼?"

為什麼會有特徵工程

特徵:可以想成是電腦透過數值,理解這個世界的方式。舉例來說,我們想預測一顆蘋果咬下去是甜的、是酸的,就會需要收集一些跟這個蘋果有關的數據去陳述。在陳述這顆蘋果的時候,可能包含顏色、重量、甜度、品種、大小、摘取時間、產地等等。這些圍繞在蘋果的數據,幫助人、也幫助電腦去理解這個資料點的一些特性。

對於傳統的機器學習,通常是用來解答具有特定答案的單個問題或領域。資料團隊準備數據,在一些簡單的資料整理過後就可以給模型來學習了。過去在講到機器學習的時候,特徵值的數量也不太多,或者當特徵值一多的時候,大家還會去思考怎麼使用評估函數(evaluation function)來幫現在的狀況對應到一個函數值。

而神經網絡在過去已經是一門學問,但是在 1980 年代重新出現。當時研究人員開發了反向傳播參數的方法構建和訓練多級神經網絡。Yoshua Bengio、Yann LeCun 和 Geoffrey Hinton 在該領域做了許多激發想像、開創性的工作。這三位也在 2018 年獲得圖靈獎。

在過去的10幾20年間,大家使用電腦、資訊產品的時間越來越多了,資料的產生也是過去以往無法比擬的速度在增長。同時間硬體的進步,也讓資料科學家們能夠從CPU計算走到GPU甚至TPU運算。這些在過去價格高昂的機器,現在也能夠以更親人的價格去使用它們。能夠做的機器學習、深度學習題目也變得更多元。如果還想了解更多近期深度學習的發展,也可以參照這篇閱讀2010 年代:深度學習十年 / 2020 年代展望

在資料量與計算能量雙重成長之下,機器能學習的特徵值也變得比以前要多出許多,有些模型甚至從數百、上千的特徵值當中學習。也因此在機器學習專案的開發過程當中也增加了特徵工程,特別針對不同的特徵來事先處理,讓資料集可以更容易被演算法識別、分類。

特徵工程為什麼重要

根據上圖可以看到,資料科學家所做的工作中有近 82% 是構建、清理、組織和收集數據。這些工作都屬於特徵工程的一環。像是確保資料都有被標籤註記,透過不同的數學特徵來確保資料點是能夠被電腦簡單拆分的。

常見的特徵工程

特徵工程其中一件重要的事情,就是必須讓領域專家與資料科學團隊合作。資料集當中存在兩種噪音,其存在可能會對模型帶來不好的影響。一種是跟領域知識有關,哪些資料是否會影響我們要預測的標的。另一種則是跟數學有關,這些噪音是否會影響模型的表現,有沒有資料點在這個階段需要增加重新取樣、刪除?每一個產業的專家在過去都有其經驗,知道公司面對的客群大概會是什麼分佈、有哪些資料點會是公司比較在乎或是不在乎的等等。這些事情如果只就數學面來看,可能不一定呈現在資料集裡面。

特徵工程通常包含特徵建構、特徵提取、特徵選擇,讓模型的各項指標(例如準確率、召回率)能夠再提升一些和異常處理(異常值檢測、處理缺失值、重新採樣不平衡數據),讓模型有更好適應性的前處理。

特徵建構(construction)/特徵轉換

透過與人類行為/商業活動的邏輯,讓資料集能夠反映真實世界的樣貌。舉三個常見的例子:(1)日期(2)公車站牌(3)文字、圖像分析

(1)日期:通常會是一個datetime的字串,像是2021-12-31 23:59:59.978,本身包含的訊息像是年、月、日、時、分、秒。在處理日期的特徵工程時常會把這些拆開來,除了可以加上相對應的季節、是不是假日、是不是節慶、一週的第幾天等等的額外訊息,讓模型可以學習到一些不同時間需要應對有不同的行為模式。

(2)公車站牌:或是其他跟地址位置相關的特徵,其對應的數字或字串通常都不代表有什麼意涵,但是卻是描述資料點重要的特徵時。就會需要把公車站牌的名字,轉換成經緯度、轉換成在該路線上面的公里數等等。甚至是該公車站牌距離市中心多遠、距離起點終點的距離等等,也都比單純放上一個公車站牌的字串要有意義許多。

(3)文字、圖像分析:在文字與圖像的處理上,也都會把資料轉換成向量。像文字,就會透過BERT等模型轉換成一個向量,讓電腦方便運算,用來代表平常人類閱讀的文字。圖片的話,最常使用的就是轉換成RGB的向量。

特徵提取(extraction)

透過數學上的轉換,讓不同類別的資料可以更清楚地分開。可以是同樣維度的轉換,或是降低原本有的維度。以下圖為例,如果要區分紅色和藍色的點,會需要一個圓形的函數去切分開他們,在適當的轉換之後則可以用一條線、或一個平面輕易的將兩者切分開來。這兩者相比較的話,會是右邊的資料點對於機器學習模型來說要友善一些。

*來源:feature engineering, before and after

常用的轉換方式有:傅立葉轉換、圖像檔案、數學特徵轉換。而講到降低特徵值的維度的話,則有PCA、TSNE 等算法可使用。透過不同的數學運算來讓不同群集的資料點更靠近、或者距離更遠,同時也需要保持資料點本身的完整性,不要因為轉換之後資料點的數學或統計特性就消失了。

特徵選擇(selection)

前面的幾個應用,都是怎麼讓特徵值變得更多元,更仔細的闡述事情的狀況給電腦知道。有的時候也可能我提供給電腦的特徵太多了,因此就會想要有一些方式可以幫助我們選取重要的特徵就好。常見的特徵挑選方式,是使用:
(1) F-score 可以找到特徵和目標列之間的線性關係,並相應地創建分數。使用每個特徵的分數,我們可以消除具有較低 F 分數的特徵。同樣,相互計算得分可以同時捕捉特徵和標籤(label)之間的線性和非線性關係。

(2) 卡方是統計學中用來檢驗兩個事件獨立性的一種檢驗。較低的卡方值表示兩個變量(特徵和目標)是獨立的。兩個變量的較高值意味著依賴,因此是重要的特徵。

(3) 其他常見的方式也可以到sklearn的官網看看,大家常用的特徵挑選方法有哪些。

這幾種方式不外乎就是看看特徵之間是否相似、是否依賴,有沒有可以剔除的。特徵與標籤之間有沒有相關,有沒有直接就可以找到線性關係的可能。經過幾次的計算、搜尋之後只會留下重要的特徵了。

還有其他的異常處理像是:異常值檢測、處理缺失值、重新採樣不平衡數據。也都屬於常見的特徵工程要處理的範圍。也蠻好從名字就可以想見內容是要做什麼資料處理。

結語

談論到什麼是特徵、以及怎麼處理特徵工程之後,個人覺得在處理資料上,其實還是會需要經驗的堆疊。也因此很推薦大家去看看各式各樣的ML問題,像是企業成功案例分享、或是常見的Kaggle競賽等等。雖說Kaggle的資料集已經比真實世界的要乾淨、好處理很多,他仍然不失為一個,培養自己如何做特徵工程的好方式,競賽的程式碼分頁也可以看看其他人是怎麼做的。除了這些之外,也可以直接找open dataset或者網路上爬取資料下來練習(以不違反該網站的分享license為前提)。

Real-life	vs Kaggle Competition
*來源:Real-life vs Kaggle Competition

今天先談到這邊,明天見。

Reference

[1]. Why Deep Learning Is So Hot Right Now
[2]. AI/Machine Learning has been around for many years, how come it suddenly has become such a hot topic?
[3]. The 2010s: Our Decade of Deep Learning / Outlook on the 2020s
[4]. Feature Engineering in Machine Learning
[5]. Feature Engineering Made Easy. When it comes to machine learning, I…
[6]. 4 Tips for Advanced Feature Engineering and Preprocessing - KDnuggets
[7]. Top 5 feature engineering tips for better models


上一篇
從AWS技術白皮書看MLOps解決方案
下一篇
MLOps專案關於安全性與合規性的10件注意事項
系列文
談MLOps - 模型、專案架構、產品化及維運29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言